"""
单例
多个子类调用同一个父类时，一般每个子类所调用父类的地址都各不相同
单例的目的是让每个子类所调用的父类地址总是保持一致
"""


# 只初始化一次  只执行一次__init__


class MusicPlayer(object):
    # 记录第一个被创建对象的引用(类属性)
    isinstance = None
    # 记录是否执行过初始化动作
    init_flag = False

    def __new__(cls, *args, **kwargs):
        # 判断类属性是否为空对象
        if cls.isinstance is None:
            # 调用父类的方法，为第一个对象分配空间  父类是object
            cls.isinstance = super().__new__(cls)
        # 返回类属性保存的对象引用
        return cls.isinstance

    def __init__(self):
        # 判断是否执行过初始化动作
        if MusicPlayer.init_flag:
            return
        # 如果没有执行过，再执行初始话动作
        print("初始化播放器")
        # 修改类属性的标记
        MusicPlayer.init_flag = True


play1 = MusicPlayer()
print(play1)

play2 = MusicPlayer()
print(play2)
